package com.zyl.blog.tasks.schedule.abstracts;

import org.springframework.scheduling.Trigger;

import java.time.Duration;

/**
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.tasks.schedule.abstracts
 * @ClassName: DynamicTask
 * @Description:
 * @Author FinalFantasy
 * @Date 2025/8/13-14:14
 */
public interface DynamicTask {
    /* 核心方法（必须实现）*/
    /* 获取任务ID */
    String getTaskId();

    /* 获取任务对象 */
    Runnable getTaskLogic() throws NoSuchMethodException;

    /* 获取任务触发器 */
    Trigger getTrigger();

    /* 合并元数据方法（可选实现）*/
    default TaskMetadata getMetadata() {
        return new TaskMetadata(
                this.getClass().getSimpleName(),
                "未配置任务描述",
                Duration.ZERO
        );
    }

    /* 合并执行信息（通过默认方法实现）*/
    default ExecutionInfo getExecutionInfo() {
        return new ExecutionInfo(
                this.getClass().getName(),
                "executeTask" // 默认方法名
        );
    }
    /* 中断逻辑（按需实现）*/
    default void interrupt() {}

    /* 元数据对象 */
    record TaskMetadata(
            String taskName,        // 任务名称
            String description,     // 任务描述
            Duration fixedInterval  // 固定间隔（仅FIXED_DELAY类型需要）
    ) {}

    /* 执行信息对象 */
    record ExecutionInfo(
            String beanClassName,   // Bean类全限定名
            String methodName       // 执行方法名
    ) {}

}